#ifndef __MY_HOT__
#define __MY_HOT__

#include <string>
#include "data_manage.hpp"

extern cloud::DataManager *_data;
namespace cloud
{
    class HotManager
    {
    public:
        HotManager()
        {
            Config *config = Config::GetInstance();
            _back_dir = config->GetBackDir();
            _pack_dir = config->GetPackDir();
            _pack_suffix = config->GetPackFileSuffix();
            _hot_time = config->GetHotTime();
            filemanage tmp1(_back_dir);
            filemanage tmp2(_pack_dir);

            tmp1.CreateDirectory();
            tmp2.CreateDirectory();
        }
        // 热点判断
        bool HotJudge(std::string &str)
        {
            filemanage fm(str);
            time_t last_time = fm.LastATime();
            time_t cur_time = time(nullptr);
            if (cur_time - last_time > _hot_time)
                return true;

            return false;
        }
        bool RunModule()
        {
            while (1)
            {
                // 1、遍历备份目录，获取所有文件名
                filemanage fm(_back_dir);
                std::vector<std::string> array;
                fm.GetDirectory(array);

                // 2、遍历判断文件是否是非热点文件
                for (auto &a : array)
                {
                    if (HotJudge(a) == false)
                        continue;

                    // 3、获取文件的备份信息
                    BackupInfo bkget;
                    if(_data->GetOneByRealPath(a,bkget) == false)
                    {
                        // 现在有一个文件存在，但是没有备份信息
                        bkget.NewBackupInfo(a);
                    }

                    // 4、对非热点文件进行压缩处理
                    filemanage tmp(a);
                    tmp.Compress(bkget._packpath);
                    // 5、删除源文件，修改备份信息
                    tmp.Romove();
                    bkget._packflag = true;
                    _data->Update(bkget);
                }
                usleep(10);
            }

            return true;
        }

    private:
        std::string _back_dir;    // 备份文件路径
        std::string _pack_dir;    // 压缩文件路径
        std::string _pack_suffix; // 压缩包后缀名
        int _hot_time;            // 热点判断时间
    };
}

#endif